package com.example.progressbardemo;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {

    // 声明控件
    private ProgressBar circleProgress;    // 圆形进度条
    private ProgressBar horizontalProgress; // 水平进度条
    private Button startBtn;               // 按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 绑定控件（通过ID找到布局中的元素）
        circleProgress = findViewById(R.id.circleProgress);
        horizontalProgress = findViewById(R.id.horizontalProgress);
        startBtn = findViewById(R.id.startBtn);

        // 按钮点击事件：开始任务
        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startTask(); // 调用任务方法
            }
        });
    }

    // 模拟任务过程
    private void startTask() {
        // 1. 显示圆形进度条（准备阶段），隐藏水平进度条
        circleProgress.setVisibility(View.VISIBLE);
        horizontalProgress.setVisibility(View.GONE);
        horizontalProgress.setProgress(0); // 重置进度为0

        // 2. 开启子线程模拟耗时任务（不能在主线程做耗时操作）
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 模拟“准备时间”2秒
                    Thread.sleep(2000);

                    // 3. 准备完成后，显示水平进度条，开始更新进度
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            horizontalProgress.setVisibility(View.VISIBLE);
                        }
                    });

                    // 4. 模拟“下载进度”：从0到100，每次增加5，间隔300毫秒
                    for (int progress = 0; progress <= 100; progress += 5) {
                        // 子线程不能直接更新UI，必须用runOnUiThread切换到主线程
                        final int currentProgress = progress;
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                horizontalProgress.setProgress(currentProgress);
                            }
                        });
                        Thread.sleep(300); // 模拟下载耗时
                    }

                    // 5. 任务完成后，隐藏圆形进度条
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            circleProgress.setVisibility(View.GONE);
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start(); // 启动子线程
    }
}